package com.hibase.upms.service.user;

import com.github.pagehelper.PageInfo;
import com.hibase.core.mybatis.service.BaseService;
import com.hibase.core.web.entity.OperationIdEntity;
import com.hibase.upms.entity.user.MdsUser;
import com.hibase.upms.entity.user.dto.MdsUserSearchVO;
import com.hibase.upms.entity.user.dto.MdsUserUpdateMultiVO;
import com.hibase.upms.entity.user.dto.MdsUserUpdateVO;
import com.hibase.upms.entity.user.vo.MdsUserVO;
import com.hibase.upms.entity.user.vo.*;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author ChrisCui
 * @since 2019-04-16
 */
public interface MdsUserService extends BaseService<MdsUser> {

    /**
     * 新增用户
     *
     * @param mdsUser
     */
    MdsUser changeUser(MdsUserUpdateVO mdsUser);

    /**
     * 新增用户
     *
     * @param mdsUser
     */
    MdsUser changeUser(MdsUserUpdateMultiVO mdsUser);

    /**
     * 判断用户名密码是否正确
     *
     * @param userName 用户名
     * @param password 密码
     */
    MdsUser checkLoginUser(String userName, String password);


    /**
     * 根据用户名称获取当前用户的所拥有的角色集合
     *
     * @param userName
     * @return
     */
    List<String> selectRoleInfosByUserName(String userName);

    /**
     * 根据用户名称获取当前用户的所拥有的角色集合
     *
     * @param userName
     * @return
     */
    List<String> selectPermissionsByUserName(String userName);

    /**
     * @param userName
     * @return
     * @Title: IMdsUserService
     * @Description: selectNameByUserName
     * @author TimBrian
     * @since Aug 2, 2021 4:54:09 PM
     */
    List<String> selectNameByUserName(String userName);

    /**
     * 用户状态更新（启用停用）
     *
     * @param ids
     * @param recordStatusEnable
     */
    void changeUserStatus(List<String> ids, boolean recordStatusEnable);

    /**
     * 查询列表
     *
     * @param searchVO
     * @return
     */
    PageInfo<MdsUserVO> selectList(MdsUserSearchVO searchVO);

    /**
     * 查询用户角色列表
     *
     * @param idEntity
     * @return
     */
    PageInfo<MdsUserRoleViewVO> selectUserRoleList(OperationIdEntity idEntity);

    /**
     * 移除用户角色
     *
     * @param mdsUserRoleDeleteVo
     */
    void deleteUserRole(MdsUserRoleOpVO mdsUserRoleDeleteVo);


    /**
     * 查询用户未绑定角色列表
     *
     * @param idEntity
     * @return
     */
    PageInfo<MdsUserRoleViewVO> selectUserNoRoleList(OperationIdEntity idEntity);

    /**
     * 修改密码
     *
     * @param oldPasswd 旧密码
     * @param newPasswd 新密码
     */
    void updatePasswd(String oldPasswd, String newPasswd);


    /**
     * 重置密码
     *
     * @param id       用户id
     * @param password 密码
     */
    void resetPasswd(String id, String password);

    /**
     * 查询用户详情
     *
     * @param id 用户id
     */
    MdsUserVO selectUserById(String id);

    /**
     * 详情
     *
     * @param id
     * @return
     */
    MdsUserViewVO viewDetails(String id);

    /**
     * 根据角色code 获取角色ID
     *
     * @param code
     * @return
     */
    String selectRoleIdByCode(String code);

    List<String> selectPossessMenusList();

    /**
     * 查询当前下级组织所有用户列表
     *
     * @param searchVO
     * @return
     */
    PageInfo selectChildUserList(MdsUserSearchVO searchVO);
}
